<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>天气案例-监视属性</title>
  <script src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
        <h3>今天天气真{{info}}</h3>
        <button @click="isHot = ! isHot">切换</button>
        <br> <br>
        <h3>a的值为{{numbers.a}}</h3>
        <button @click="numbers.a++">点击让a+1</button>
    </div>
    <script type='text/javascript'>
        const vm = new Vue({
            el:'#root',
            data:{
               isHot:true,
               numbers:{
                  a:1,
                  b:2
               }
            },
            methods:{
              changeWeather(){
                  //  if(this.isHot){
                  //     this.isHot = false
                  //  }else{
                  //     this.isHot = true
                  //  }

                  //(1)以后以上代码 直接用下面取反用在语句中
                  this.isHot = ! this.isHot
               }
            },
            computed:{
               info(){
                  return this.isHot ? '炎热' : '寒冷'
               }
            },
            watch:{
              
                isHot:{
               
                    immediate:true,
           
                    handler(newValue,oldValue){
                        console.log('数据被修改了',newValue,oldValue);
                    }
                },
                /**
                 * (1)监视多级结构中某个属性的变化是使用字符串的形式
                 * (2)属性名字 原本就是字符串形式的，只是Vue简写了
                 *    但是简写了不支持多级结构，因此需要原始字符串形式
                 * */ 
                'numbers.a':{
                    handler(){
                        console.log('a数据被修改了');
                    }
                },
                /**
                 * (3)监视多级结构中 所有 属性的变化是使用字符串的形式
                 * (4)watch它默认是不监视 层级内部的属性，即只看numbers的值--地址
                 *    需要监视它内部的属性则需要加上deep:true，表示可以监视深层的属性
                 * 注意：Vue本身可以监视 多层内部的属性(手动更改内部属性，然后又作用到模板代码)，但是watch不行
                 * */ 
                numbers:{
                    deep:true,
                    handler(){
                        console.log('numbers数据被修改了');
                    }
                }
            }
        })
    </script>
</body>
</html>